﻿package com.simarsoft.common.db;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * 数据库单引号替换类<p>
 * 传入参数为对象(包括String字串)，返回参数为对象(包括String字串)<BR>
 * 静态replace方法将对象中的String类型属性中的单引号做数据库入库处理。<BR>
 * 即：一个单引号替换为两个单引号<p>
 * 
 * 创建日期：2009-12-07
 * 更新日期：2009-12-07
 * @author MA HUAN
 * @versionv 1.0
 */
public class QuoteReplace {
	 
	/**
	 * 将对象中的String类型属性中的单引号做数据库入库处理。
	 * @param o String字串或者值对象
	 * @return String字串或者值对象，若传入对象为null则返回null
	 */
	public static Object replace(Object o) {
		 
		/*空值处理*/
		if(o == null) return null;
		
		/*String字串处理*/
		if(o instanceof String) {
			return ((String)o).replace("'", "''");
		}
		
		/*对象处理*/
		try {
			/*临时映射表，key-方法名，value-方法对象*/
			Map<String, Method> methodMap = new HashMap<String, Method>();
			/*遍历对象中所有方法并存入方法映射表methodMap中*/
			Method[] methods = o.getClass().getDeclaredMethods();
			for(Method method : methods) {
				methodMap.put(method.getName(), method);
			}
			
			/*
			 * 做单引号替换，通过调用对象中的get方法获取String字串值，
			 * 并调用对应的set方法进行属性值的更新
			 */
			String methodString = null;
			String value = null;
			for(Method method : methods) {
				methodString = method.toString();
				if(methodString != null && methodString.indexOf("java.lang.String") > -1 && methodString.indexOf("get") > -1) {
					value = (String)method.invoke(o, new Object[0]);
					if(value != null)
						methodMap.get(method.getName().replace("get", "set")).invoke(o, value.replace("'", "''"));
				}
			}
		 }
		 catch(Exception e) {
			 e.printStackTrace();
		 }
		 
		 return o;
	 }
}



